import datetime

# datetime.date
d = datetime.date(1995, 3, 28)
print(d)
print(type(d))

# ValueError vom Konstruktor
#d = datetime.date(1995, 2, 29)     # ValueError: day is out of range for month

d = datetime.date.today()
print(d)
t = datetime.date.fromtimestamp(0)
print(t)

print()
d = datetime.date.today()
s = datetime.date.ctime(d)
print(s)
s = datetime.date.isoformat(d)
print(s)
n = d.replace(year=2005)
print(n)
s = d.strftime("%A %Y %w")
print(s)
x = d.timetuple()
print(x)
w = d.weekday()
print(w)

# datetime.time
print()
t = datetime.time(2, 30, 25)
print(t)
t = datetime.time(minute=10)
print(t)
t = datetime.time(hour=12, second=36, microsecond=123456)
print(t)
s = t.isoformat()
print(s)
r = t.replace(minute=55)
print(r)
s = r.strftime("Stunde: %H, Minute: %M")
print(s)

# datetime.datetime
print()
bescherung = datetime.datetime(1989, 12, 24, 18, 30)
print(bescherung)
print(bescherung.minute)
print(bescherung.month)
dt = datetime.datetime.now()
print(dt)
dt = datetime.datetime.utcnow()
print(dt)
dt = datetime.datetime.fromtimestamp(3142123410)
print(dt)

print()
dt = datetime.datetime.now()
s = dt.ctime()
print(s)
d = dt.date()
print(d)
s = dt.isoformat()
print(s)
r = dt.replace(year=2000, microsecond=9876)
print(r)
t = dt.time()
print(t)
ts = dt.timetuple()
print(ts)
w = dt.weekday()
print(w)

# datetime.timedelta
print()
d1 = datetime.datetime(1989, 1, 9, 12, 0, 0)
d2 = datetime.datetime(1989, 2, 10, 20, 15, 0)
delta1 = d2 - d1
print(delta1)
print(type(delta1))
print(delta1.days)
print(delta1.seconds)
print(delta1.microseconds)
delta2 = d1 - d2
print(delta2)
print(delta1 + delta2) # d1 und d2 weisen dieselben Absolut-Werte auf

td = datetime.timedelta(days=-32, seconds=-29700)
print(td)
td = datetime.timedelta(days=0.5)
print(td)
print(td.total_seconds())
td = datetime.timedelta(days=32, seconds=29700, milliseconds=123)
print(td.total_seconds())
delta3 = datetime.timedelta(seconds=2794500.123)
print(delta3)

print()
woche = datetime.timedelta(days=7)
print(woche)
tag = woche / 7
print(tag)
jahr = 52 * woche + tag
print(jahr)
print(jahr / woche)
print(datetime.timedelta.__divmod__(delta1, delta3))

# Operationen für datetime und date
print()
p = datetime.date(1987, 1, 9)
j = datetime.date(1987, 7, 26)
delta1 = j - p
print(delta1)
s = datetime.datetime(1995, 1, 1)
o = datetime.datetime(1995, 5, 4, 12, 00)
delta2 = o - s
print(delta2)
print(p + delta1)
print(o - 2 * delta2)
print(p + datetime.timedelta(days=5))

print()
datum = datetime.date(1995, 3, 15)
print(datum)
dreivierteltag = datetime.timedelta(days=0.75)
print(dreivierteltag)
m_dreivierteltag = -dreivierteltag
print(m_dreivierteltag)

print(datum - dreivierteltag)       # days = 0
print(datum + m_dreivierteltag)     # days = -1

# Vergleichsoperatoren
print()
date1 = datetime.date(1987, 7, 26)
date2 = datetime.date(1987, 11, 3)
print(date1 < date2)